package com.young.core.dao;


import com.young.core.domain.LockDO;

public interface LockDao {

    /**
     * 根据namespace获取Lock
     * @param namespace
     * @return
     */
    LockDO get(String namespace);

    /**
     * 保持活性，ttl表示续约市场，考虑到DB时钟可能与Broker节点时钟不同，所以需要将ttl传入
     * @param namespace
     * @param owner
     * @param ttl
     * @return
     */
    boolean keepAlive(String namespace, String owner, int ttl);

    /**
     * 尝试加锁，如果加锁成功则返回true
     * @param namespace
     * @param owner
     * @param version
     * @return
     */
    boolean lock(String namespace, String owner, long version);

    boolean unlock(String namespace, String owner);

    void insert(String namespace);

}
